package com.hegaoye.account.dao;

import com.hegaoye.account.entity.Account;
import com.hegaoye.account.entity.AccountState;
import com.hegaoye.core.base.BaseDAO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 账户
 *
 * @author pi-top
 */
@Mapper
@Repository
public interface AccountDAO extends BaseDAO<Account, Long> {

  /**
   * 加载一个对象Account 通过id
   *
   * @param id id
   * @return Account
   */
  Account loadById(@Param("id") java.lang.Long id);

  /**
   * 加载一个对象Account 通过code
   *
   * @param code 编码
   * @return Account
   */
  Account loadByCode(@Param("code") java.lang.String code);

  /**
   * 加载一个对象Account 通过account
   *
   * @param account 账户
   * @return Account
   */
  Account loadByAccount(@Param("account") java.lang.String account);

  /**
   * 根据主键id,oldStates 共同更新 Account 的状态到newState状态
   *
   * @param id id
   * @param newState 新状态
   * @param oldStates 旧状态集合
   */
  void updateStateById(
      @Param("id") java.lang.Long id,
      @Param("newState") String newState,
      @Param("oldState") String... oldStates);

  /**
   * 根据主键code,oldStates 共同更新 Account 的状态到newState状态
   *
   * @param code 编码
   * @param newState 新状态
   * @param oldStates 旧状态集合
   */
  void updateStateByCode(
      @Param("code") java.lang.String code,
      @Param("newState") String newState,
      @Param("oldState") String... oldStates);

  /**
   * 根据主键account,oldStates 共同更新 Account 的状态到newState状态
   *
   * @param account 账户
   * @param newState 新状态
   * @param oldStates 旧状态集合
   */
  void updateStateByAccount(
      @Param("account") java.lang.String account,
      @Param("newState") String newState,
      @Param("oldState") String... oldStates);

  /**
   * 根据主键id 更新 Account 的状态到另一个状态
   *
   * @param id id
   * @param state 状态
   */
  void updateById(@Param("id") java.lang.Long id, @Param("state") String state);

  /**
   * 根据主键code 更新 Account 的状态到另一个状态
   *
   * @param code 编码
   * @param state 状态
   */
  void updateByCode(@Param("code") java.lang.String code, @Param("state") String state);

  /**
   * 根据主键account 更新 Account 的状态到另一个状态
   *
   * @param account 账户
   * @param state 状态
   */
  void updateByAccount(@Param("account") java.lang.String account, @Param("state") String state);

  /**
   * 删除对象Account
   *
   * @param params 实体的属性
   */
  void delete(Map<String, Object> params);

  /**
   * 查询Account列表
   *
   * @param rowBounds 分页参数
   * @return List<Account>
   */
  List<Account> list(RowBounds rowBounds);

  /**
   * 查询Account分页 根据状态
   *
   * @param id id
   * @param code 编码
   * @param account 账户
   * @return List<Account>
   */
  List<Account> listByPk(
      java.lang.Long id,
      java.lang.String code,
      java.lang.String account,
      AccountState state,
      RowBounds rowBounds);

  int countByPk(
      java.lang.Long id, java.lang.String code, java.lang.String account, AccountState state);

  /**
   * 根据账号和密码查询
   *
   * @param paraMap
   * @return Account
   */
  Account loadByAccountAndPwd(Map<String, String> paraMap);
}
